Given the continually increased reliance on computers in contemporary society, computer technology has had to advance on many fronts to keep up with increased demand. One particular subject of significant research and development efforts is parallelism, i.e., the performance of multiple tasks in parallel.
A number of computer software and hardware technologies have been developed to facilitate increased parallel processing. From a software standpoint, multithreaded operating systems and kernels have been developed, which permit computer programs to concurrently execute in multiple “threads” so that multiple tasks can essentially be performed at the same time. Threads generally represent independent paths of execution for a program. For example, for an e-commerce computer application, different threads might be assigned to different customers so that each customer's specific e-commerce transaction is handled in a separate thread.
From a hardware standpoint, computers increasingly rely on multiple microprocessors to provide increased workload capacity. Furthermore, some microprocessors have been developed that support the ability to execute multiple threads in parallel, effectively providing many of the same performance gains attainable through the use of multiple microprocessors.
One logical extension of parallel processing is the concept of logical partitioning, where a single physical computer is permitted to operate essentially like multiple and independent “virtual” computers (referred to as logical partitions), with the various resources in the physical computer (e.g., processors, memory, input/output devices) allocated among the various logical partitions. Each logical partition executes a separate operating system, and from the perspective of users and of the software applications executing on the logical partition, operates as a fully independent computer.
With logical partitioning, a shared program, often referred to as a “hypervisor” or partition manager, manages the logical partitions and facilitates the allocation of resources to different logical partitions. For example, a partition manager may allocate resources such as processors, workstation adapters, storage devices, memory space, network adapters, etc. to various partitions to support the relatively independent operation of each logical partition in much the same manner as a separate physical computer. For each task executing within a logical partition, the task is typically limited to only the resources assigned to that partition, and thus the task is not permitted to access any resources assigned to other partitions.
While in some instances, resources such as processors are required to be assigned to only one partition, some architectures support micro-partitioning, which provides the capability to run more partitions on a computer than the number of physical microprocessors. There are generally two types of micro-partitions, “capped” and “uncapped”. A capped partition is not allowed to exceed its initial resource entitlement, while an uncapped partition is. An uncapped partition is typically only limited in its ability to consume system resources by the lack of availability of the actual resource.
Capped and uncapped partitions make use of a shared processor pool, which is a group of physical processors that provide processing capacity as a resource. This resource may be shared amongst partitions, where a partition can be assigned whole or partial “slices” of a processor. There may be additional tuning parameters for shared processor partitions to define the relative priority of the partition and its shares of the physical processors as well. The number of virtual processors may limit the maximum amount of processor capacity for an uncapped partition. A virtual processor is a portion of a physical processor's capacity as presented to a partition. Thus, a virtual processor may represent from 10% to 100% of a real processor. An uncapped partition, for example, defined with a total of three virtual processors and an entitled capacity of two processors would normally use only two processors' worth of computing power. If the partition needed more processor resources and there was excess capacity available (i.e. unused by any other partition) in the share processor pool, the partition could use up to three processors worth of capacity.
In contrast, a capped partition with a similar definition could only use up to two processors capacity, even if there was excess processor capacity available in the shared pool. Thus, an uncapped partition is guaranteed a minimum resource level, with the potential to use more, and a capped partition is guaranteed a maximum capacity. The former creates a minimum service level for the partition; the latter guarantees a capacity that cannot be exceeded and cannot impact the overall behavior of the physical system.
Uncapped partitions enable users to utilize resources when other partitions are not active, or when they are not using all of the allocated processor power. Automatic resource switching may be a welcome feature to system administrators and performance analysts that look at the overall capabilities of a computer system. This ability may also open the door for the operating system itself to take advantage of this capability and automatically shift resources to other applications, such as batch processing or other resource intensive applications like database query optimization. As is commonly known with database query optimization, the optimizer makes decisions on which access plan(s) to use or generate based on the available system resources as well as the physical database being queried. Therefore the amount of processing power available to a partition executing a database query optimization as well as the amount of memory may greatly influence the decisions an optimizer makes.
Similarly, batch processing consumes system resources and may affect overall system performance when the system is also being used interactively. More batch processing could be performed if additional system resources were to become available. Likewise, batch processing may be suspended until minimum levels of resources are available to avoid performance issues with interactive users.
What is needed therefore is a method to take advantage of the underutilization of resources in a logically partitioned multiprocessor environment to optimize performance by accounting for the underutilization of the resources.